package com.woniu.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.dto.HisPatientDto;
import com.woniu.dto.PageDTO;
import com.woniu.exception.DIYException;
import com.woniu.moudle.HisPatient;
import com.woniu.mapper.HisPatientMapper;
import com.woniu.param.ListHisPatientParam;
import com.woniu.param.LoginHisPatientParam;
import com.woniu.param.ModifyHisPatientParam;
import com.woniu.param.RegistratPatientParam;
import com.woniu.service.HisPatientService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author w
 * @since 2021-11-11
 */
@Service
public class HisPatientServiceImpl extends ServiceImpl<HisPatientMapper, HisPatient> implements HisPatientService {
    @Resource
    private HisPatientMapper hisPatientMapper;
    @Override
    public HisPatientDto patientLogin(LoginHisPatientParam loginHisPatientParam) {
        QueryWrapper<HisPatient> hisPatientQueryWrapper = new QueryWrapper<>();
        hisPatientQueryWrapper.eq("patient_cardid",loginHisPatientParam.getPatientCardid());
        List<HisPatient> list = list(hisPatientQueryWrapper);
        if(list.size()==0){
            throw new DIYException(-9999,"该用户还未在本医院注册");
        }
        if(!(list.get(0).getPatientPassword().equals(loginHisPatientParam.getPatientPassword()))){
            throw new DIYException(-9999,"密码错误");
        }
        HisPatientDto hisPatientDto = new HisPatientDto();
        BeanUtils.copyProperties(list.get(0),hisPatientDto);
        return hisPatientDto;
    }

    @Override
    public Boolean deletePatient(ArrayList<Integer> ids) {
        int i = hisPatientMapper.deleteBatchIds(ids);
        return i>0?true:false;
    }

    @Override
    public HisPatientDto newPatients(RegistratPatientParam registratPatientParam) {
        HisPatient hisPatient = new HisPatient();
        BeanUtils.copyProperties(registratPatientParam,hisPatient);
        hisPatientMapper.insert(hisPatient);
        HisPatientDto hisPatientDto = new HisPatientDto();
        BeanUtils.copyProperties(hisPatient,hisPatientDto);
        return hisPatientDto;
    }

    @Override
    public Integer modifyBalance(Integer id, Integer money) {
        HisPatient hisPatient = hisPatientMapper.selectById(id);
        HisPatient hisPatient1 = new HisPatient();

        int i = hisPatient.getPatientBalance().intValue();

        hisPatient1.setPatientBalance(new BigDecimal(i+money));
        hisPatient1.setPatientId(id);
        hisPatientMapper.updateById(hisPatient1);

        return i+money;
    }

    @Override
    public Boolean modifyHospitalizationStatus(Integer id) {

        HisPatient hisPatient = hisPatientMapper.selectById(id);
        int stats=hisPatient.getPatientStatus()==0?1:0;
        HisPatient hisPatient1 = new HisPatient();
        hisPatient1.setPatientId(id);
        hisPatient1.setPatientStatus(stats);
        int i = hisPatientMapper.updateById(hisPatient1);
        return i>0?true:false;
    }

    @Override
    public HisPatientDto modifyPatientInformation(ModifyHisPatientParam modifyHisPatientParam) {
        HisPatient hisPatient = new HisPatient();
        BeanUtils.copyProperties(modifyHisPatientParam,hisPatient);
        hisPatientMapper.updateById(hisPatient);
        HisPatientDto hisPatientDto = new HisPatientDto();
        BeanUtils.copyProperties(hisPatient,hisPatientDto);
        return hisPatientDto;
    }

    @Override
    public PageDTO<HisPatientDto> queryCorrespondingInformation(ListHisPatientParam listHisPatientParam) {
        QueryWrapper<HisPatient> hisPatientQueryWrapper = new QueryWrapper<>();
        if(listHisPatientParam!=null){
            if(listHisPatientParam.getPatientAddress()!=null){
                hisPatientQueryWrapper.eq("patient_id",listHisPatientParam.getPatientId());
            }
            if(listHisPatientParam.getPatientAddress()!=null){
                hisPatientQueryWrapper.eq("patient_address",listHisPatientParam.getPatientAddress());
            }
            if(listHisPatientParam.getPatientAge()!=null){
                hisPatientQueryWrapper.eq("patient_age",listHisPatientParam.getPatientAge());
            }
            if(listHisPatientParam.getPatientBloodPressure()!=null){
                hisPatientQueryWrapper.eq("patient_blood_pressure",listHisPatientParam.getPatientBloodPressure());
            }
            if(listHisPatientParam.getPatientEmergency()!=null){
                hisPatientQueryWrapper.eq("patient_emergency",listHisPatientParam.getPatientEmergency());
            }
            if(listHisPatientParam.getPatientGander()!=null){
                hisPatientQueryWrapper.eq("patient_gander",listHisPatientParam.getPatientGander());
            }
            if(listHisPatientParam.getPatientHeight()!=null){
                hisPatientQueryWrapper.eq("patient_height",listHisPatientParam.getPatientHeight());
            }
            if(listHisPatientParam.getPatientIdentification()!=null){
                hisPatientQueryWrapper.eq("patient_Identification",listHisPatientParam.getPatientIdentification());
            }
            if(listHisPatientParam.getPatientName()!=null){
                hisPatientQueryWrapper.eq("patient_name",listHisPatientParam.getPatientName());
            }
            if(listHisPatientParam.getPatientPulse()!=null){
                hisPatientQueryWrapper.eq("patient_pulse",listHisPatientParam.getPatientPulse());
            }
            if(listHisPatientParam.getPatientStatus()!=null){
                hisPatientQueryWrapper.eq("patient_status",listHisPatientParam.getPatientStatus());
            }
            if(listHisPatientParam.getPatientEmergencyPhone()!=null){
                hisPatientQueryWrapper.eq("patient_emergency_phone",listHisPatientParam.getPatientEmergencyPhone());
            }
            if(listHisPatientParam.getPatientTemperature()!=null){
                hisPatientQueryWrapper.eq("patient_temperature",listHisPatientParam.getPatientTemperature());
            }
            if(listHisPatientParam.getPatientWeight()!=null){
                hisPatientQueryWrapper.eq("patient_weight",listHisPatientParam.getPatientWeight());
            }
        }
        Page<HisPatient> page = page(new Page<HisPatient>(listHisPatientParam.getPageParam().getPage(), listHisPatientParam.getPageParam().getPageSize()), hisPatientQueryWrapper);

        return PageDTO.bulid(page,HisPatientDto.class);
    }
}
